package com.zhijian.medical.enums.diagnose.report;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 胶质瘤枚举
 */
@Slf4j
public class ColloidEnum {

    /**
     * 术前治疗
     */
    @AllArgsConstructor
    @Getter
    public enum PreTreatmentEnum {
        //化疗 放疗 同步放化疗 靶向治疗 免疫治疗 无
        CHEMOTHERAPY("chemotherapy", "化疗"),
        RADIATION("radiation", "放疗"),
        SYNERGY_RADIATION("synergyRadiation", "同步放化疗"),
        TARGETED_TREATMENT("targetedTreatment", "靶向治疗"),
        IMMUNOTHERAPY("immunotherapy", "免疫治疗"),
        NO("no", "无");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PreTreatmentEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 标本名称
     */
    @AllArgsConstructor
    @Getter
    public enum SampleNameEnum {
        //胃组织 吻合口近端 吻合口远端
        STOMACH("stomach", "胃组织"),
        NEAR("near", "吻合口近端"),
        FAR("far", "吻合口远端");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(SampleNameEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 标本类型
     */
    @AllArgsConstructor
    @Getter
    public enum SampleTypeEnum {
        //手术切除标本 术中冰冻标本 其他
        SURGICAL_RESECTION("surgical_resection", "手术切除标本"),
        FROZEN("frozen", "术中冰冻标本"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(SampleTypeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 手术方式
     */
    @AllArgsConstructor
    @Getter
    public enum OperationModeEnum {
        //未说明 其他
        NO("no", "未说明"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(OperationModeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 肿瘤部位
     */
    @AllArgsConstructor
    @Getter
    public enum TumorLocationEnum {
        //左侧额叶 右侧额叶 左侧顶叶 右侧顶叶 左侧颞叶 右侧颞叶 左枕叶 右枕叶 岛叶 小脑蚓部 小脑 三脑窒 四脑室
        LEFT_FRONTAL_LOBE("leftFrontalLobe", "左侧额叶"),
        RIGHT_FRONTAL_LOBE("rightFrontalLobe", "右侧额叶"),
        LEFT_PARIETAL_LOBE("leftParietalLobe", "左侧顶叶"),
        RIGHT_PARIETAL_LOBE("rightParietalLobe", "右侧顶叶"),
        LEFT_TEMPORAL_LOBE("leftTemporalLobe", "左侧颞叶"),
        RIGHT_TEMPORAL_LOBE("rightTemporalLobe", "右侧颞叶"),
        LEFT_OCCIPITAL_LOBE("leftOccipitalLobe", "左枕叶"),
        RIGHT_OCCIPITAL_LOBE("rightOccipitalLobe", "右枕叶"),
        CEREBELLUM("cerebellum", "小脑蚓部"),
        CEREBELLUM_PART("cerebellumPart", "小脑"),
        THIRD_VENTRICLE("thirdVentricle", "三脑窒"),
        FOURTH_VENTRICLE("fourthVentricle", "四脑室");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(TumorLocationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 肿瘤大小
     */
    @AllArgsConstructor
    @Getter
    public enum TumorSizeEnum {

        S3("3.5x2.5", "3.5x2.5"),
        S20("20x16x3", "20x16x3");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(TumorSizeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学诊断
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalDiagnosisEnum {
        //高级别胶质瘤 低级别胶质瘤 高级别神经上皮肿瘤 低级别神经上庋肿瘤
        HIGH_GRADE_GLIOMA("highGradeGlioma", "高级别胶质瘤"),
        LOW_GRADE_GLIOMA("lowGradeGlioma", "低级别胶质瘤"),
        HIGH_GRADE_NEUROEPITHELIAL_TUMOR("highGradeNeuroepithelialTumor", "高级别神经上皮肿瘤"),
        LOW_GRADE_NEUROEPITHELIAL_TUMOR("lowGradeNeuroepithelialTumor", "低级别神经上皮肿瘤");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalDiagnosisEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学诊断-考虑
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalDiagnosisConsiderEnum {
        //成人型弥漫性胶质瘤 儿童型弥漫性低级别胶质瘤 儿童型弥漫性高级别胶质瘤 局限性星形细胞胶质瘤 胶质神经元和神经元肿瘤 室管膜肿瘤
        ADULT_DIFFUSE_GLIOMA("adultDiffuseGlioma", "成人型弥漫性胶质瘤",HistologicalDiagnosisConsiderAdultDiffuseGliomaEnum.getList()),
        CHILD_DIFFUSE_LOW_GRADE_GLIOMA("childDiffuseLowGradeGlioma", "儿童型弥漫性低级别胶质瘤",HistologicalDiagnosisConsiderChildDiffuseLowGradeGliomaEnum.getList()),
        CHILD_DIFFUSE_HIGH_GRADE_GLIOMA("childDiffuseHighGradeGlioma", "儿童型弥漫性高级别胶质瘤",HistologicalDiagnosisConsiderChildDiffuseHighGradeGliomaEnum.getList()),
        LIMITING_ASTROCYTOMA("limitingAstrocytoma", "局限性星形细胞胶质瘤",HistologicalDiagnosisConsiderLimitingAstrocytomaEnum.getList()),
        GLIOMA_NEURONAL_AND_NEURONAL_TUMOR("gliomaNeuronalAndNeuronalTumor", "胶质神经元和神经元肿瘤",HistologicalDiagnosisConsiderGliomaNeuronalAndNeuronalTumorEnum.getList()),
        TUMOR_OF_THE_VENTRICULAR_SYSTEM("tumorOfTheVentricularSystem", "室管膜肿瘤",HistologicalDiagnosisConsiderTumorOfTheVentricularSystemEnum.getList());

        private final String key;
        private final String desc;
        private final List<MappingEnum<String, String>> child;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalDiagnosisConsiderEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), e.getChild()))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学诊断-考虑-成人型弥漫性胶质瘤
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalDiagnosisConsiderAdultDiffuseGliomaEnum {
        //星形细胞瘤 少突胶质细胞瘤 胶质母细胞瘤
        ASTROCYTOMA("astrocytoma", "星形细胞瘤"),
        OLIGODENDROGLIOMA("oligodendroglioma", "少突胶质细胞瘤"),
        GLIOMA_BABYS("gliomaBabys", "胶质母细胞瘤");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalDiagnosisConsiderAdultDiffuseGliomaEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学诊断-考虑-儿童型弥漫性低级别胶质瘤
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalDiagnosisConsiderChildDiffuseLowGradeGliomaEnum {
        //弥漫性星形细胞瘤 血管中心型胶质瘤 青年人多形性低级别神经上皮肿瘤 弥漫性低级别胶质瘤MAPK通路变异型
        DIFFUSE_ASTROCYTOMA("diffuseAstrocytoma", "弥漫性星形细胞瘤"),
        VASCULAR_CENTER_TYPE_GLIOMA("vascularCenterTypeGlioma", "血管中心型胶质瘤"),
        YOUNG_MULTIFORM_LOW_GRADE_NEUROEPITHELIAL_TUMOR("youngMultiformLowGradeNeuroepithelialTumor", "青年人多形性低级别神经上皮肿瘤"),
        DIFFUSE_LOW_GRADE_GLIOMA_MAPK_PATHWAY_VARIANT("diffuseLowGradeGliomaMapkPathwayVariant", "弥漫性低级别胶质瘤MAPK通路变异型");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalDiagnosisConsiderChildDiffuseLowGradeGliomaEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学诊断-考虑-儿童型弥漫性高级别胶质瘤
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalDiagnosisConsiderChildDiffuseHighGradeGliomaEnum {
        //弥漫性中线胶质瘤 弥漫性半球胶质瘤 弥漫性儿童型高级别胶质瘤 婴儿型半球胶质瘤
        DIFFUSE_MIDLINE_GLIOMA("diffuseMidlineGlioma", "弥漫性中线胶质瘤"),
        DIFFUSE_HEMISPHERE_GLIOMA("diffuseHemisphereGlioma", "弥漫性半球胶质瘤"),
        DIFFUSE_CHILDHOOD_HIGH_GRADE_GLIOMA("diffuseChildhoodHighGradeGlioma", "弥漫性儿童型高级别胶质瘤"),
        INFANTILE_HEMISPHERE_GLIOMA("infantileHemisphereGlioma", "婴儿型半球胶质瘤");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalDiagnosisConsiderChildDiffuseHighGradeGliomaEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学诊断-考虑-局限性星形细胞胶质瘤
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalDiagnosisConsiderLimitingAstrocytomaEnum {
        //毛细胞型星形细胞瘤 有毛细胞样特征的高级别星形细胞瘤 多形性黄色瘤型星形细胞瘤 室管膜下巨细胞型星形细胞瘤 脊索样胶质瘤 星形母细胞瘤
        HEMATOCRITIC_ASTROCYTOMA("hematocriticAstrocytoma", "毛细胞型星形细胞瘤"),
        HIGH_GRADE_ASTROCYTOMA_WITH_HAIR_CELL_LIKE_FEATURES("highGradeAstrocytomaWithHairCellLikeFeatures", "有毛细胞样特征的高级别星形细胞瘤"),
        POLYPOID_YELLOWULAR_TYPE_ASTROCYTOMA("polyoidYellowularTypeAstrocytoma", "多形性黄色瘤型星形细胞瘤"),
        VENTRICULAR_SUBEPENDYMAL_HIGHER_GRADE_ASTROCYTOMA("ventricularSubependymalHigherGradeAstrocytoma", "室管膜下巨细胞型星形细胞瘤"),
        CHORDOID_GLIOBLASTOMA("chordoidGlioblastoma", "脊索样胶质瘤"),
        ASTROCYTOMA_BABYS("astrocytomaBabys", "星形母细胞瘤");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalDiagnosisConsiderLimitingAstrocytomaEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }

    }

    /**
     * 组织学诊断-考虑-胶质神经元和神经元肿瘤
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalDiagnosisConsiderGliomaNeuronalAndNeuronalTumorEnum {
        //神经节细胞胶质瘤 神经节细胞瘤 婴儿促纤维增生性神经节细胞胶质瘤 婴儿促纤维增生性星形细胞瘤 胚胎发育不良性神经上皮肿瘤
        //有少突胶质细胞瘤样特征和核簇的弥漫性胶质神经元肿瘤 乳头状胶质神经元肿瘤 形成菊形团的胶质神经元肿瘤 黏液样胶质神经元肿瘤
        //弥漫性软脑膜胶质神经元肿瘤 多结节和空泡状神经元肿瘤 小脑发育不良性神经节细胞瘤（Lhermitte-Duclos病）  中枢神经细胞瘤 脑室外神经细胞瘤 小脑脂肪神经细胞瘤
        GANGLION_CELL_GLIOBLASTOMA("ganglionCellGlioblastoma", "神经节细胞胶质瘤"),
        GANGLION_CELL_TUMOR("ganglionCellTumor", "神经节细胞瘤"),
        INFANTILE_PROMYELOCYTIC_GANGLION_CELL_GLIOBLASTOMA("infantilePromyelocyticGanglionCellGlioblastoma", "婴儿促纤维增生性神经节细胞胶质瘤"),
        INFANTILE_PROMYELOCYTIC_HIGH_GRADE_ASTROCYTOMA("infantilePromyelocyticHighGradeAstrocytoma", "婴儿促纤维增生性星形细胞瘤"),
        FETAL_DEVELOPMENTAL_GLIOBLASTOMA("fetalDevelopmentalGlioblastoma", "胚胎发育不良性神经上皮肿瘤"),
        DIFFUSE_GLIOBLASTOMA_WITH_FEATURES_OF_THE_OligODENDROGLIOMA("diffuseGlioblastomaWithFeaturesOfTheOligodendroglioma", "有少突胶质细胞瘤样特征和核簇的弥漫性胶质神经元肿瘤"),
        POLYPOID_GLIOBLASTOMA("polyoidGlioblastoma", "乳头状胶质神经元肿瘤"),
        FORMING_CHOROID_GLIOBLASTOMA("formingChoroidGlioblastoma", "形成菊形团的胶质神经元肿瘤"),
        GLIOMA_NEURONAL_AND_NEURONAL_TUMOR("gliomaNeuronalAndNeuronalTumor", "黏液样胶质神经元肿瘤"),
        DIFFUSE_SOFT_TISSUE_GLIOBLASTOMA("diffuseSoftTissueGlioblastoma", "弥漫性软脑膜胶质神经元肿瘤"),
        MULTINODULAR_AND_VACUOLAR_NEURONAL_TUMOR("multinodularAndVacuolarNeuronalTumor", "多结节和空泡状神经元肿瘤"),
        SMALL_CEREBELLUM_DEVELOPMENTAL_GLIOBLASTOMA("smallCerebellumDevelopmentalGlioblastoma", "小脑发育不良性神经节细胞瘤（Lhermitte-Duclos病）"),
        CENTRAL_NERVOUS_SYSTEM_TUMOR("centralNervousSystemTumor", "中枢神经细胞瘤"),
        EXTRACEREBRAL_NERVOUS_SYSTEM_TUMOR("extracerebralNervousSystemTumor", "脑室外神经细胞瘤"),
        SMALL_CEREBELLUM_FAT_NEURONAL_TUMOR("smallCerebellumFatNeuronalTumor", "小脑脂肪神经细胞瘤");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalDiagnosisConsiderGliomaNeuronalAndNeuronalTumorEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }

    }

    /**
     * 组织学诊断-考虑-室管膜肿瘤
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalDiagnosisConsiderTumorOfTheVentricularSystemEnum {
        //幕上室管膜瘤 后颅窝室管膜瘤 脊髓室管膜瘤 黏液乳头状型室管膜瘤 室管膜下室管膜瘤
        SUPRACEREBRAL_VENTRICULAR_TUMOR("supracerebralVentricularTumor", "幕上室管膜瘤"),
        POSTERIOR_FOSSA_VENTRICULAR_TUMOR("posteriorFossaVentricularTumor", "后颅窝室管膜瘤"),
        SPINAL_VENTRICULAR_TUMOR("spinalVentricularTumor", "脊髓室管膜瘤"),
        GLIOMA_WITH_FEATURES_OF_THE_POLYPOID("gliomaWithFeaturesOfThePolyoid", "黏液乳头状型室管膜瘤"),
        SUBVENTRICULAR_VENTRICULAR_TUMOR("subventricularVentricularTumor", "室管膜下室管膜瘤");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalDiagnosisConsiderTumorOfTheVentricularSystemEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学分级
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalGradeEnum {
        //CNS WHO 1级   CNS WHO 2级  CNS WHO 3级  CNS WHO 4级
        CNS_WHO_1("cnsWho1", "CNS WHO 1级"),
        CNS_WHO_2("cnsWho2", "CNS WHO 2级"),
        CNS_WHO_3("cnsWho3", "CNS WHO 3级"),
        CNS_WHO_4("cnsWho4", "CNS WHO 4级");


        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalGradeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织描述
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalDescriptionEnum {
        //弥漫浸润性生长 局限性生长 星形细胞形态 少突胶质细胞形态 上皮样-横纹肌样形态 钙化 坏死 微血管增生 低度核异型性 中度核异型性 高度核异型性 高倍镜下有丝分裂数
        DIFFUSE_INVASIVE_GROWTH("diffuseInvasiveGrowth", "弥漫浸润性生长"),
        LIMITING_GROWTH("limitingGrowth", "局限性生长"),
        ASTROCYTOMA_FORM("astrocytomaForm", "星形细胞形态"),
        OLIGODENDROGLIOMA_FORM("oligodendrogliomaForm", "少突胶质细胞形态"),
        EPITHELIAL_SKELETAL_MORPHOLOGY("epithelialSkeletalMorphology", "上皮样-横纹肌样形态"),
        CALCIFICATION("calcification", "钙化"),
        NECROSIS("necrosis", "坏死"),
        MICROVASCULAR_PROLIFERATION("microvascularProliferation", "微血管增生"),
        LOW_GRADE_NUCLEAR_HETEROGENEITY("lowGradeNuclearHeterogeneity", "低度核异型性"),
        MEDIUM_GRADE_NUCLEAR_HETEROGENEITY("mediumGradeNuclearHeterogeneity", "中度核异型性"),
        HIGH_GRADE_NUCLEAR_HETEROGENEITY("highGradeNuclearHeterogeneity", "高度核异型性"),
        HIGH_MAGNIFICATION_MITOCHONDRIAL_DIVISION("highMagnificationMitochondrialDivision", "高倍镜下有丝分裂数");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalDescriptionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 浸润（二级结构）
     */
    @AllArgsConstructor
    @Getter
    public enum InfiltrationEnum {
        //无 神经元周围卫星现象 围血管侵犯 软脑膜播散
        NO("no", "无"),
        NEURONAL_SURROUNDING_SATELLITE_PHENOMENON("neuronalSurroundingSatellitePhenomenon", "神经元周围卫星现象"),
        PERICARINAL_INVASION("pericarinalInvasion", "围血管侵犯"),
        SOFT_TISSUE_SPREAD("softTissueSpread", "软脑膜播散");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(InfiltrationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 分子检测-项目
     */
    @AllArgsConstructor
    @Getter
    public enum MolecularDetectionEnum {
        //IDH1/2突变(Q-PCR)  1p/19q共缺失(FISH)  BRAF V600E突变(Q-PCR)  BRAF断裂(FISH)  CDKN2A缺失(FISH)(*)  EGFR扩增(FISH)  EGFR突变(Q-PCR)  FGFR2断裂(FISH)  H3-3A/H3C2/H3C3突变(测序)
        //MGMT甲基化(Q-FCR)  MYCN扩增(FISH)(*)  PTEN缺失(FISH)(*)  RET(10q11)断裂(FISH)(*) TERT启动子突变(Q-PCR)  EWSR1断裂(FISH)(*)
        IDH1_2_MUTATION_QPCR("idh1_2MutationQpcr", "IDH1/2突变(Q-PCR)"),
        ONE_P_19Q_DELETION_FISH("oneP19qDeletionFish", "1p/19q共缺失(FISH)"),
        BRAF_V600E_MUTATION_QPCR("brafV600eMutationQpcr", "BRAF V600E突变(Q-PCR)"),
        BRAF_BREAKAGE_FISH("brafBreakageFish", "BRAF断裂(FISH)"),
        CDKN2A_DELETION_FISH("cdkn2aDeletionFish", "CDKN2A缺失(FISH)(*)"),
        EGFR_AMPLIFICATION_FISH("egfrAmplificationFish", "EGFR扩增(FISH)"),
        EGFR_MUTATION_QPCR("egfrMutationQpcr", "EGFR突变(Q-PCR)"),
        FGFR2_BREAKAGE_FISH("fgfr2BreakageFish", "FGFR2断裂(FISH)"),
        H3_3A_H3C2_H3C3_MUTATION_SEQUENCING("h3_3aH3c2H3c3MutationSequencing", "H3-3A/H3C2/H3C3突变(测序)"),
        MGMT_METHYLATION_QPCR("mgmtMethylationQpcr", "MGMT甲基化(Q-FCR)"),
        MYCN_AMPLIFICATION_FISH("mycnAmplificationFish", "MYCN扩增(FISH)(*)"),
        PTEN_DELETION_FISH("ptenDeletionFish", "PTEN缺失(FISH)(*)"),
        RET_10Q11_BREAKAGE_FISH("ret10q11BreakageFish", "RET(10q11)断裂(FISH)(*)"),
        TERT_PROMOTER_MUTATION_QPCR("tertPromoterMutationQpcr", "TERT启动子突变(Q-PCR)"),
        EWSR1_BREAKAGE_FISH("ewsR1BreakageFish", "EWSR1断裂(FISH)(*)");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MolecularDetectionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 免疫组化-表达式
     */
    @AllArgsConstructor
    @Getter
    public enum ImmunohistochemistryExpressionEnum {

        PLUS("+", "+"),
        REDUCE("-", "-"),
        PLUS2("++", "++"),
        PLUS3("+++", "+++"),
        PLUS_OR_MINUS("±", "±");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ImmunohistochemistryExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 免疫组化-其他表达
     */
    @AllArgsConstructor
    @Getter
    public enum ImmunohistochemistryOtherExpressionEnum {

        LYMPHOCYTE_EXPRESSION("lymphocyte_expression", "淋巴细胞表达"),
        VASCULAR_EXPRESSION("vascular_expression", "脉管表达"),
        IMMUNE_CELL_EXPRESSION("immune_cell_expression", "间质免疫细胞表达");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ImmunohistochemistryOtherExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 原位杂交/特殊染色-分析结果
     */
    @AllArgsConstructor
    @Getter
    public enum InSituHybridizationExpressionEnum {

        PLUS("+", "+"),
        REDUCE("-", "-"),
        ZERO("0", "0"),
        PLUS1("1+", "1+"),
        PLUS2("2+", "2+"),
        PLUS3("3+", "3+"),
        PLUS_OR_MINUS("±", "±");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(InSituHybridizationExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 淋巴结
     */
    @AllArgsConstructor
    @Getter
    public enum LymphGlandEnum {

        NOT_TRANSFERRED("not_transferred", "未见转移"),
        SEE_TRANSFER("see_transfer", "见转移"),
        GRANULOMATOUS_INFLAMMATION("granulomatous_inflammation", "肉芽肿性炎"),
        ADIPOSE_TISSUE("adipose_tissue", "脂肪组织"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LymphGlandEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 其他送检组织
     */
    @AllArgsConstructor
    @Getter
    public enum OtherInspectionOrganizationsEnum {

        GASTRIC_TISSUE("gastric_tissue", "胃组织"),
        ANASTOMOTIC_SITE_NEAR_END("anastomotic_site_near_end", "吻合口近端"),
        ANASTOMOTIC_SITE_REMOTE_END("anastomotic_site_remote_end", "吻合口远端");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(OtherInspectionOrganizationsEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

}
